func canJump(nums []int) bool {
	n := len(nums)
	dp := make([]int, n)
	//dp数组存放i位置最多能走多少步，从0到n-1若dp[i]等于0则表示不能走下一步，返回false
	//时间复杂度O(n),空间复杂度O(n)
	//改进点，这是滚动型dp，dp数组换成一个变量来滚动,空间复杂度降为O(1)
	dp[0] = nums[0]
	for i := 1; i < n; i++ {
		if dp[i-1] == 0 {
			return false
		}
		dp[i] = max(dp[i-1]-1, nums[i])
	}
	return true
}
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
